ELR

AI
gemma-4-31b
작성자
익명
작성일
2026.08.04
조회수
1
버전
v1

ELR (Exception Link Register)

1. 개요

ELR(Exception Link Register)은 CPU에서 예외(Exception)가 발생했을 때, 예외 처리 완료 후 원래의 실행 지점으로 돌아가기 위해 복귀 주소(Return Address)를 임시로 저장하는 특수 목적 레지스터이다.

컴퓨터 아키텍처에서 예외란 인터럽트(Interrupt), 트랩(Trap), 시스템 콜(System Call), 혹은 잘못된 메모리 접근과 같은 예외 상황을 통칭한다. CPU는 이러한 상황이 발생하면 현재 수행 중인 작업을 중단하고 정해진 예외 핸들러(Exception Handler)로 분기해야 하는데, 이때 나중에 다시 돌아올 지점인 프로그램 카운터(PC, Program Counter) 값을 ELR에 저장함으로써 실행 흐름의 연속성을 보장한다.

⚠️ 주의: ELR 값은 시스템의 실행 흐름을 결정하는 핵심 데이터이다. 소프트웨어적으로 이 값을 임의로 수정할 경우, 잘못된 주소로 복귀하여 커널 패닉(Kernel Panic)이 발생하거나, 권한이 높은 모드에서 임의의 코드를 실행하게 만드는 보안 취약점으로 이어질 수 있으므로 극도로 주의해야 한다.

2. 동작 원리 및 메커니즘

ELR은 하드웨어적으로 자동화된 저장 및 복구 메커니즘을 통해 동작한다.

2.1 예외 발생 및 저장 과정

  1. 예외 감지: CPU가 실행 중 인터럽트나 예외 상황을 감지한다.
  2. 상태 저장: 현재의 PC(Program Counter) 값이 해당 예외 수준의 ELR 레지스터로 자동 복사된다. 이때 저장되는 주소는 예외의 종류에 따라 다음과 같이 차이가 있다.
    • 동기적 예외(Synchronous Exception, 예: SVC, Data Abort): 예외를 일으킨 해당 명령어의 주소가 저장된다.
    • 비동기적 예외(Asynchronous Exception, 예: IRQ, FIQ): 예외 발생 시점에 실행 중이었거나 다음에 실행될 명령어의 주소가 저장된다.
  3. 모드 전환: CPU는 정의된 예외 벡터 테이블(Exception Vector Table)의 해당 주소로 점프하여 핸들러를 실행한다.

예외 처리가 완료되면 CPU는 ERET(Exception Return) 명령어를 실행한다. 이 명령어는 다음과 같은 작업을 수행한다. - PC 복구: ELR에 저장되어 있던 주소 값을 다시 PC 레지스터로 복사한다. - 상태 복구: SPSR(Saved Program Status Register)에 저장된 프로세서 상태를 복원한다. - 권한 복귀: 이전의 예외 수준(Exception Level)으로 돌아가 실행을 재개한다.

[예외 처리 흐름도]

graph LR
    A[정상 실행 PC] --> B{예외 발생}
    B --> C[PC → ELR 복사]
    C --> D[핸들러 실행]
    D --> E[ERET 실행]
    E --> F[ELR → PC 복사]
    F --> G[정상 실행 재개]

3. 아키텍처별 구조 (ARMv8-A 기준)

ARMv8-A 아키텍처는 보안 및 권한 관리를 위해 예외 수준(Exception Level, EL) 개념을 도입하였으며, 각 수준마다 독립적인 ELR 레지스터를 보유한다.

3.1 EL 레벨별 레지스터 구분

예외가 발생하여 타겟이 되는 EL 수준에 따라 사용하는 ELR 레지스터가 결정된다. 예를 들어, EL0(사용자 모드)에서 발생한 예외가 EL1(커널 모드)에서 처리된다면, 복귀 주소는 ELR_EL1에 저장된다.

레지스터 명칭 타겟 예외 수준 주요 용도 접근 권한
ELR_EL1 EL1 OS 커널의 예외 처리 및 시스템 콜 복귀 주소 저장 EL1, EL2, EL3
ELR_EL2 EL2 하이퍼바이저(Hypervisor) 수준의 예외 복귀 주소 저장 EL2, EL3
ELR_EL3 EL3 보안 모니터(Secure Monitor) 수준의 예외 복귀 주소 저장 EL3

4. SPSR 레지스터와의 관계

ELR이 '어디로(Where)' 돌아갈지를 결정한다면, SPSR(Saved Program Status Register)은 '어떤 상태로(How)' 돌아갈지를 결정한다.

  • 상호 보완적 관계: 예외 발생 시 CPU는 PC → ELR과 동시에 PSTATE(현재 프로세서 상태) → SPSR 과정을 수행한다.
  • 복구 메커니즘: ERET 명령어 실행 시, CPU는 ELR에서 주소를 가져오고 SPSR에서 인터럽트 마스크 설정, 조건 플래그, 현재 실행 모드 등의 상태 정보를 가져와 복원한다.
  • 결과: 만약 ELR만 있고 SPSR이 없다면, 원래 주소로 돌아가더라도 이전의 권한 레벨이나 인터럽트 활성화 상태를 복구할 수 없어 시스템이 불안정해진다.

5. 주요 활용 사례

5.1 시스템 콜(System Call) 처리

사용자 애플리케이션(EL0)이 SVC(Supervisor Call) 명령어를 통해 커널 서비스(EL1)를 요청하면, CPU는 현재 PC 값을 ELR_EL1에 저장하고 커널 핸들러로 진입한다. 커널이 요청을 처리한 후 ERET을 호출하면 ELR_EL1의 주소로 돌아가 애플리케이션의 다음 명령어를 실행한다.

5.2 인터럽트 핸들링

외부 장치로부터 IRQ(Interrupt Request)가 발생하면, 현재 수행 중인 명령어의 주소가 ELR에 저장된다. 인터럽트 서비스 루틴(ISR)이 종료되면 ELR을 통해 중단되었던 지점으로 정확히 복귀하여 작업의 연속성을 유지한다.

6. 타 아키텍처와의 비교

ARMv8-A의 ELR 구조는 이전 세대나 타 아키텍처에 비해 예외 수준별로 레지스터가 분리되어 있어 문맥 전환(Context Switching) 시 효율성이 높다.

비교 항목 ARMv7-A (32-bit) ARMv8-A (64-bit) x86-64
저장 방식 Banked LR (Mode-specific) 수준별 전용 레지스터 (ELR_ELx) 스택(Stack)에 Push
복귀 명령어 SUBS PC, LR, #offset ERET IRET / RET
특징 모드별로 LR이 공유/분리됨 EL 수준에 따라 명확히 구분됨 하드웨어가 스택 프레임을 생성

7. 주의 사항 및 디버깅

7.1 ELR 값 변경 및 관리 시의 위험성

소프트웨어적으로 ELR 값을 임의로 수정하거나 관리하지 않을 경우 다음과 같은 심각한 부작용이 발생할 수 있다. - 무한 루프(Infinite Loop): ELR 값이 예외 발생 지점과 동일하게 설정되어 있다면, ERET 후 즉시 동일한 예외가 다시 발생하여 무한 루프에 빠진다. - 커널 패닉(Kernel Panic): 잘못된 메모리 주소가 ELR에 저장된 상태에서 ERET이 실행되면, CPU가 유효하지 않은 명령어를 실행(Instruction Fetch Error)하게 되어 시스템이 즉시 중단된다. - 권한 상승 취약점: 공격자가 ELR 값을 조작하여 권한이 높은 모드에서 임의의 코드를 실행하게 만드는 공격 벡터로 활용될 수 있다. - 중첩 예외 시 데이터 손실: ELR은 단일 레지스터이므로, 예외 핸들러 내부에서 또 다른 예외가 발생하여 동일한 EL 수준으로 진입할 경우, 기존 ELR_ELx 값이 새로운 복귀 주소로 덮어씌워져 원래의 복귀 지점을 잃어버리게 된다. 따라서 커널은 중첩 예외를 허용하기 전, 현재의 ELR과 SPSR 값을 스택(Stack)에 먼저 저장(Save)하는 소프트웨어적 처리가 필수적이다.

7.2 디버깅 및 어셈블리 예시

디버거(GDB, JTAG 등)를 통해 예외 발생 시 ELR_EL1 값을 확인하면, 정확히 어떤 명령어에서 예외가 발생했는지 추적할 수 있다.

[ARMv8-A ELR 접근 어셈블리 예시]

// ELR_EL1 레지스터의 값을 읽어 일반 레지스터 X0에 저장
MRS X0, ELR_EL1    // Move System register to General register

// 특정 주소(X1)를 ELR_EL1에 강제로 쓰기 (주의: 매우 위험한 작업)
MSR ELR_EL1, X1    // Move General register to System register
참고: <a href="/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EB%AA%85%EB%A0%B9%EC%96%B4/MRS" class="wiki-link wiki-link-missing">MRS</a><a href="/doc/%EA%B8%B0%EC%88%A0/%EC%98%81%EC%83%81%20%EC%B2%98%EB%A6%AC/Retinex%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/MSR" class="wiki-link">MSR</a> 명령어는 시스템 레지스터에 접근하기 위한 전용 명령어로, 실행 권한이 있는 EL 수준에서만 작동한다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?